Versioning

The evolution of the source code is handle through the internal representation of ngl source code (ngl program graph)

Each change of the program graph will be logged using predefined actions to make cluster merging possible

[15.1] nvs

nvs is the version system of ngl and can be controlled by nc. It's another entity with its own concepts, separated from ngl

nvs nvs
{
    refactor
    add
    del
    ...
}

ngc:serialize {

}

[15.2] Program graph evolution

Concepts

  • add : add an edge
  • del : delete an edge
  • edit :
    • refactor : identifier changed
    • reorder : edge order changed
  • add_parameterization
  • del_parameterization

Some concepts can be merged, for example (add & parameterization)

Updating a concept : nc update ngc::movie

Autodetect the evolution type of the concept and save it.

ngc movie
{
    ngc:name <title> 
    // change to ngc:name <name> // nvs:refactor 
    ngc:name <director>
}

[15.3] Concept version resolution

Cluster C, concept movie
Cluster A, concept movie v1
Cluster B, concept movie v2

Cluster main use cluster A and B

Duplicated movie in A and B
nvs:resolve<A:movie, B:movie>

// cluster A, v1
ngc movie
{
    ngc:name <title> 
    ngc:name <director>
}

// cluster B, v2
ngc movie
{
    ngc:name <title> 
    ngc:name <director>
    ngc:date <date>
}

// result : no merge required, use v2